package pers.xiaojun.boot.common.enums;

import cn.hutool.core.util.ObjUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import pers.xiaojun.boot.common.validation.ArrayValuable;

import java.util.Arrays;

/**
 * 公共状态
 *
 * @author xiaojun
 * @since 2025-10-23
 */
@AllArgsConstructor
@Getter
public enum CommonStatusEnum implements ArrayValuable<Integer> {

    ENABLE(0, "开启"),
    DISABLE(1, "关闭");

    private static final Integer[] ARRAY = Arrays.stream(values()).map(CommonStatusEnum::getStatus).toArray(Integer[]::new);

    /**
     * 状态代码
     */
    private final Integer status;
    /**
     * 状态名称
     */
    private final String name;

    /**
     * 判断是否开启
     *
     * @param status 状态代码
     * @return 是否开启
     */
    public static boolean isEnable(Integer status) {
        return ObjUtil.equals(ENABLE.status, status);
    }

    /**
     * 判断是否关闭
     *
     * @param status 状态代码
     * @return 是否关闭
     */
    public static boolean isDisable(Integer status) {
        return ObjUtil.equals(DISABLE.status, status);
    }

    /**
     * 根据状态代码获取状态枚举
     *
     * @param status 状态代码
     * @return 状态枚举类
     */
    public static CommonStatusEnum getByStatus(Integer status) {
        return Arrays.stream(values())
                .filter(t -> t.getStatus().equals(status))
                .findFirst().orElse(null);
    }

    /**
     * 根据状态名称获取状态枚举
     *
     * @param name 状态名称
     * @return 状态枚举类
     */
    public static CommonStatusEnum getByName(String name) {
        return Arrays.stream(values())
                .filter(t -> t.getName().equals(name))
                .findFirst().orElse(null);
    }

    @Override
    public Integer[] array() {
        return ARRAY;
    }
}
